package com.ltu.service;

import javax.validation.Valid;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ltu.config.shiro.dto.LoginReq;
import com.ltu.config.shiro.dto.SmsCodeLoginReq;
import com.ltu.domain.mp_entity.UserEntity;
import com.ltu.model.request.base.BaseIdReq;
import com.ltu.model.request.user.UpdateUserInfoReq;
import com.ltu.model.request.user.UserForgotPassword;
import com.ltu.model.request.user.UserPageReq;
import com.ltu.model.request.user.UserRegisterReq;
import com.ltu.model.request.user.UserResetPasswordReq;
import com.ltu.model.request.user.UserUpdateReq;
import com.ltu.model.request.user.WxMaLoginReq;
import com.ltu.model.response.base.CodeDataResp;
import com.ltu.util.exception.ApiException;

import me.chanjar.weixin.common.error.WxErrorException;



public interface UserService extends IService<UserEntity> {

    /**
     * 前端用户登录
     * @param userLoginReq
     * @return
     */
    CodeDataResp login(LoginReq userLoginReq);
    /**
     * 后台管理用户登录
     * @param userLoginReq
     * @return
     */
    CodeDataResp loginByAccount(LoginReq userLoginReq);

    /**
     * 短信验证码登陆
     * @param userLoginReq
     * @return
     */
    CodeDataResp loginBySmsCode(SmsCodeLoginReq userLoginReq);

    /**
     * 注销登录
     * @return
     */
    CodeDataResp logout();


    /**
     * 重置密码
     * @param req
     * @return
     */
    CodeDataResp resetPassword(UserResetPasswordReq req);

    /**
     * 忘记密码
     * @param req
     * @return
     */
    CodeDataResp forgotPassword(UserForgotPassword req);

    /**
     * 获取用户详细信息
     * @param baseIdReq
     * @return
     */
    CodeDataResp getUserInfo(BaseIdReq baseIdReq);

    /**
     * 更新用户信息
     * @param userReq
     * @return
     */
    CodeDataResp updateUserInfo(UpdateUserInfoReq userReq);
    
    void editUserPhone( Integer userId,String phone);



    /**
     * MP-获取用户完整信息
     * @param baseIdReq
     * @return
     */
    CodeDataResp getDetail(BaseIdReq baseIdReq);

    /**
     * MP-保存或修改用户信息
     * @param req
     * @return
     */
    CodeDataResp saveOrUpdate(UserUpdateReq req);

    /**
     * 通过手机号获取用户信息
     * @param userPhone
     * @return
     */
    UserEntity getUserByPhone(String userPhone,Integer roleType);
	/**
	 * 获取微信openId
	 */
	void getWxUserOpendId(UserEntity sysUser, String wxCode);

	CodeDataResp loginByWx(@Valid WxMaLoginReq userLoginReq) throws WxErrorException;
	
	
	public String getWxUserPhone(String code) ;
	/**
	 * 用户登陆
	 * @param userLoginReq
	 * @return
	 */
	CodeDataResp<UserEntity> login(UserEntity sysUser, LoginReq userLoginReq);
	/**
	 * 通过手机号获取用户信息
	 * 
	 * @param userPhone
	 * @return
	 */
	UserEntity getUserByUnionid(String unionid, Integer roleType,String companyCode);
	/**
	 * 刷新redis中的用户
	 * @param userPhone
	 * @return
	 */
	UserEntity getUserById(String id);
	void refreshUser(String id, String unionid);
	UserEntity refreshUserByUnionid(String unionid, Integer roleType, String companyCode);
	
	
}
